package cn.bupt.signal
{
	import flash.events.Event;
	import flash.display.Sprite;

	public class generator extends Sprite
	{
		import flash.utils.ByteArray;
		import mx.collections.ArrayCollection;
		
		private var dataRange:Number = 127;//2^7-1
		private var dataArray:ByteArray=new ByteArray();			
		private var ZeroData:ByteArray=new ByteArray();			
		private var arrayCollection:ArrayCollection;
			
		public function generator()
		{
		}
		public function initData():void{
			for(var i:Number=0;i<240;i++){
				this.ZeroData.writeInt(127);
			}
		}
		
		public function sinData():void{
			var data:Number;
			for(var i:int=0;i<240;i++){
				data = dataRange*(Math.sin(2*Math.PI*i/240))+127;
				dataArray.writeByte(data);
			}
		}
		public function squareData(duty_radio:Number):void{
			var num:Number;
			num = 240*duty_radio;
			for(var i:int=0;i<240;i++){
				if(i<num){
					dataArray.writeByte(255);
				}else{
					dataArray.writeByte(0);
				}
			}
		}
		public function triangularData():void{
			for(var i:Number=0;i<240;i++){
				if(i<120){
					dataArray.writeByte(i*255/120);
				}else{
					dataArray.writeByte(255-(i-120)*255/120);
				}
			}
		}
		public function resetData():ByteArray{
			initData();
			return ZeroData;
		}
		public function printByteArray(byteArray:ByteArray):void{
			var s:String='gdata';
			byteArray.position = 0;
			for(var i:int=0;i<byteArray.length;i++){
				s=s+byteArray.readByte()+",";
			}
			byteArray.position = 0;
			trace(s);
		}
		public function generateData(wave_form:Number,duty_radio:Number):ByteArray{
			dataArray.clear();
			dataArray.position = 0;
			if(wave_form==1){
				trace('sin+');
				sinData();
			}else if(wave_form==2){
				trace('square+');
				squareData(duty_radio);
			}else{
				trace('triangular+');
				triangularData();
			}
			dataArray.position = 0;
			return dataArray;
		}
	}
}